package exemple15.actions.admin;

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import exemple15.beans.Administrateur;
import exemple15.modeles.ModeleAdministrateurDAO;



/**
 * @author Ambroise Malric
 * @copyright 2012
 * @version 0.1
 */
@SuppressWarnings("serial")
public class AdministrateurAction extends ActionSupport implements ServletRequestAware, Preparable
{
	// Attributs
	private HttpServletRequest request;
	// Objets
	private Administrateur administrateur;
	// id de l'administrateur
	private int idAdministrateur;
	// Parametres pour la pagination
	private int page=0;
	private int maxParPage=0;
	private String champTri=null;
	private String typeTri=null;
	private String recherche=null;
	private String typerecherche=null;
	

	public Object getModel() {
		return administrateur;
	}
	
	public Administrateur getAdministrateur() {
		return administrateur;
	}

	public void setAdministrateur(Administrateur administrateur) {
		this.administrateur = administrateur;
	}

	public int getIdAdministrateur() {
		return idAdministrateur;
	}

	public void setIdAdministrateur(int idAdministrateur) {
		this.idAdministrateur = idAdministrateur;
	}

	public void setServletRequest(HttpServletRequest request)
	{
		 this.request=request;
	}

	
	
	// Preparer les donnees pour les formulaires en modification
	public void prepare() throws Exception {
		// Initialisation du modele
		ModeleAdministrateurDAO modeleAdministrateurDAO=new ModeleAdministrateurDAO();
		
		if(idAdministrateur==0) {
			administrateur=new Administrateur();
		} else {		
			administrateur=modeleAdministrateurDAO.getAdministrateur(idAdministrateur);
		}
	}
	
	

	 
	// Lister les administrateurs
	public String lister()
	{
		// Variables
		ModeleAdministrateurDAO modeleAdministrateurDAO=new ModeleAdministrateurDAO();
		ArrayList<Administrateur> listeAdministrateur=null;
		
		try 
		{
			// On recupert la page demandee
			page=Integer.parseInt(request.getParameter("page").trim());
			// Si la page vaut 0 ou inferieur on prend la valeur 1
			page=Math.max(page, 1);
		}
		catch(Exception e) 
		{
			// Si dans la requete l'attribut page n'est pas un nombre, on initialise la page e 1
			page=1;
		}
		
		try 
		{
			// On recupert le maximum d'elements a afficher
			maxParPage=Integer.parseInt(request.getParameter("maxParPage").trim());
			// Si la page vaut 0 ou inferieur on prend la valeur 1
			maxParPage=Math.max(maxParPage, 20);
		}
		catch(Exception e) 
		{
			// Si dans la requete le parametre n'est pas un nombre, on initialise le maximum d'element e 20
			maxParPage=20;
		}
	
		// On recupert le reste des elements de la requete
		recherche=(String)request.getParameter("recherche");
		typerecherche=(String)request.getParameter("typerecherche");
		champTri=(String)request.getParameter("champTri");
		typeTri=(String)request.getParameter("typeTri");
				
		// Si aucun tri n'est demande, ou que le tri est incorrect, on realise un tri sur l'id de l'administrateur
		if(champTri==null || (!champTri.equals("nomadministrateur") && !champTri.equals("prenomadministrateur") && !champTri.equals("mailadministrateur") && !champTri.equals("identifiantadministrateur") && !champTri.equals("id_administrateur")))
		{
			champTri="id_administrateur";
		}
		// Si aucun type de tri n'est demande, ou que le type de tri est incorrect, on realise un tri croissant
		if(typeTri==null || (!typeTri.equals("ASC") && !typeTri.equals("DESC")))
		{
			typeTri="ASC";
		}
	
		// On recupert la liste des administrateurs depuis le modele
		listeAdministrateur=(ArrayList<Administrateur>)modeleAdministrateurDAO.listeAdministrateurPaginer(maxParPage, page, recherche,typerecherche, champTri, typeTri);
		
		// On renvoi e la JSP la liste des administrateurs obtenu ainsi que les informations de pagination
		request.setAttribute("listeAdministrateur",listeAdministrateur);
		request.setAttribute("maxParPage", modeleAdministrateurDAO.getMaxParPage());
		request.setAttribute("pageActuel", modeleAdministrateurDAO.getPageActuel());
		request.setAttribute("totalElement", modeleAdministrateurDAO.getTotalElement());
		request.setAttribute("champTri", modeleAdministrateurDAO.getChampTri());
		request.setAttribute("typeTri", modeleAdministrateurDAO.getTypeTri());
		request.setAttribute("recherche", modeleAdministrateurDAO.getRecherche());
		request.setAttribute("typerecherche", modeleAdministrateurDAO.getTyperecherche());
		
		// On vide la liste des administrateurs par securite
		listeAdministrateur=null;
		
		// On renvoie la page de listing des administrateurs
		return SUCCESS;
	}
	
	
	
	// Consulter un administrateur
	public String consulter()
	{
		// Variables
		ModeleAdministrateurDAO modeleAdministrateurDAO=new ModeleAdministrateurDAO();
		int idAdministrateur=0;
		Administrateur administrateur=null;
		
		try
		{
			// On recupert l'id de l'administrateur
			idAdministrateur=Integer.parseInt(request.getParameter("idAdministrateur"));
		}
		catch (Exception e) 
		{
			// Si l'id de l'administrateur passe en parametre n'est pas un nombre, on initialise l'id e 0
			idAdministrateur=0;
		}
		
		// On recupert l'administrateur correspondant, renvoi null si l'id de de l'administrateur n'existe pas dans la base
		administrateur=(Administrateur)modeleAdministrateurDAO.getAdministrateur(idAdministrateur);
		
		// Si l'objet administrateur est null (id non trouve) on renvoi sur la page de listing avec un message d'erreur
		if(administrateur!=null)
		{
			// On renvoi e la JSP la categorie demandee
			request.setAttribute("administrateur",administrateur);
			
			// On vide cet administrateur par securite
			administrateur=null;
		}
		else
		{
			// On renvoi e la page de liste des administrateurs avec un message d'erreur
			addActionError(getText("erreur.administrateurexiste"));
			return "accueilAdmin";
		}
		
		return SUCCESS;
	}
	 
	
	
	
	// Afficher le formulaire d'edition (ajout ou modification)
	public String editer()
	{
		return SUCCESS;
	}
	
	
	
	// Creer ou modifier la categorie
	public String ajoutermodifier()
	{
		// Variables
		ModeleAdministrateurDAO modeleAdministrateurDAO=new ModeleAdministrateurDAO();
		int codeErreur=0;
			
		// Cas de la creation
		if(administrateur.getIdAdministrateur()==0)
		{
			// On ajoute l'administrateur e la base de donnee, renvoi 1 si l'ajout s'est deroule avec succes
			codeErreur=modeleAdministrateurDAO.ajouterAdministrateur(administrateur);
					
			// On test le code de retour pour afficher un message de succes ou d'erreur
			if(codeErreur!=1)
			{		
				// Erreur lors de la creation
				addActionError(getText("erreur.creationadministrateur"));
				return INPUT;
			}
			else
			{	
				// Succes lors de la creation
				addActionMessage(getText("succes.creationadministrateur"));
				// retourner sur la page d'accueil du listing
				return "listerAdministrateur";
			}
		}
		// Cas de la modification
		else
		{
			// On modifie l'administrateur dans la base de donnee, renvoi 1 si la modification s'est deroulee avec succes
			codeErreur=modeleAdministrateurDAO.modifierAdministrateur(administrateur);
			
			// On teste le code de retour pour afficher un message de succes ou d'erreur
			if(codeErreur!=1)
			{		
				// Erreur lors de la modification
				addActionError(getText("erreur.modificationadministrateur"));
				return INPUT;
			}
			else
			{	
				// Succes lors de la modification
				addActionMessage(getText("succes.modificationadministrateur"));
				return "listerAdministrateur";
			}
		}

	}

	
	
	// Supprimer un administrateur
	public String supprimer()
	{
		// Variables
		ModeleAdministrateurDAO modeleAdministrateurDAO=new ModeleAdministrateurDAO();
 		int idAdministrateur=0;
		int codeErreur=0;
	
		try
		{
			// On recupert l'id de l'administrateur
			idAdministrateur=Integer.parseInt(request.getParameter("idAdministrateur"));
		}
		catch (Exception e) 
		{
			// Si l'id de l'administrateur passe en parametre n'est pas un nombre, on initialise l'id e 0
			idAdministrateur=0;
		}
		
		// Si l'administrateur existe en base on peut la supprimer
		if(modeleAdministrateurDAO.getAdministrateur(idAdministrateur)!=null)
		{	
			// On envoie au modele l'id de l'administrateur e supprimer, renvoi 1 si l'administrateur a bien ete supprime
			codeErreur=modeleAdministrateurDAO.supprimerAdministrateur(idAdministrateur);
				
			// On test le code de retour pour afficher un message de succes ou d'erreur
			if(codeErreur!=1)
			{		
				// On renvoie e la page d'accueil avec un message d'erreur
				addActionError(getText("erreur.suppressionadministrateur"));
				return ERROR;
			}
			else
			{	
				// On renvoie e la page d'accueil
				addActionMessage(getText("succes.suppressionadministrateur"));
				return "listerAdministrateur";
			}
		}
		else
		{
			// On renvoie e la page d'accueil
			addActionError(getText("erreur.administrateurexiste"));
			return ERROR;
		}
		
	}
	

	
	
	
}
